package com.w7vm.menuweb.dao;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.Stateless;
import javax.persistence.Column;
import javax.persistence.EntityManager;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import com.w7vm.menuweb.entity.CardapioBuffetWeb;
import com.w7vm.menuweb.entity.ContratoPagamentoWeb;
import com.w7vm.menuweb.entity.ContratoWeb;
import com.w7vm.menuweb.utility.ConstantesEJB;
import com.w7vm.menuweb.vo.FormaPagamentoVO;


@Stateless
public class ContratoDAO extends GenericDAO<ContratoWeb> {
	
	ConstantesEJB constEJB = new ConstantesEJB();
	
	@PersistenceContext
	private EntityManager em;
	
	public ContratoDAO() {
		super(ContratoWeb.class);
		// TODO Auto-generated constructor stub
	}
	
	
	public List<ContratoWeb> findContratoByNumero(int numero){
		System.out.println("[EJB-CONTRATO][findContratoByNumero] :"+ numero);
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("numeroContrato", numero);   
		return super.findByCriterion(ContratoWeb.FIND_CONTRATO_BY_NUMERO, parameters);
	}
	
	public List<ContratoWeb> findContratoByIDRestaurante(int id){
		System.out.println("[EJB-CONTRATO][findContratoByIDRestaurante] :"+ id);
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("idRestaurante", id);   
		return super.findByCriterion(ContratoWeb.FIND_CONTRATO_BY_IDRESTAURANTE, parameters);
	}

	
	public ContratoWeb findContratoByID(int contratoID){
		System.out.println("[EJB-CONTRATO][findContratoByID] :"+ contratoID);
		return em.find(ContratoWeb.class, contratoID); 
	}

	public ContratoWeb updateDadosContrato(ContratoWeb contratoEntity){
		System.out.println("[IAM-EJB][updateDadosContrato] :"+ contratoEntity.getIdContratoWeb());
		ContratoWeb contrato = new ContratoWeb();
		try{
			contrato = super.update(contratoEntity); 
			return contratoEntity;
		}catch (NoResultException e){
			System.err.println(e.getMessage());
			return contrato;
		}
	}

	public void deleteContrato(int idContrato){
		System.out.println("[IAM-EJB][deleteContrato] :"+ idContrato);
		ContratoWeb contratoEntity = new ContratoWeb();
		
		try{
			contratoEntity = em.find(ContratoWeb.class, idContrato);
			em.remove(contratoEntity);
			em.flush();
		}catch (NoResultException e){
			System.err.println(e.getMessage());
		}
	}

	
	
	public int saveContrato(ContratoWeb contratoEntity){
		System.out.println("[IAM-EJB][saveContrato] :"+ contratoEntity.getIdContratoWeb());
		try{
			em.merge(contratoEntity);
			em.flush();
			return contratoEntity.getIdContratoWeb();
		}catch (NoResultException e){
			System.err.println(e.getMessage());
			return 0;
		}
	}
	
	
	public void updateRenovacaoContrato(ContratoWeb contratoEntity){
		System.out.println("[CONTRATO-EJB][updateRenovacaoContrato] :"+ contratoEntity.getIdContratoWeb());
		
		
	}
	
	public void deleteContratoRestaurantesFiliais(int id){
		System.out.println("[CONTRATO-EJB][deleteContratoRestaurantesFiliais] :"+ id);
		
	}
	
	public int updateStatusRestauranteContrato(int id, int status, String tipo){
		System.out.println("[CONTRATO-EJB][updateAtivaRestauranteContrato] :"+ id);
		int updated = -1;

		System.out.println("[CONTRATO-EJB][updateAtivaRestauranteContrato] tipo :"+ tipo);

		try{
			updated = em.createQuery("UPDATE ContratoRestaurantesWeb cr SET cr.status= :status" +
					" WHERE cr.idContratoRestauranteWeb IN (:id)")
					.setParameter("status", status)
					.setParameter("id",id)
					.executeUpdate();
		} catch (Exception e) {
				System.err.println(e.getMessage());
		}
		return updated;
	}
	
	
	public int updatePlanoContrato(ContratoWeb contratoEntity){
		System.out.println("[CONTRATO-EJB][updatePlanoContrato] :");
		try{
			em.merge(contratoEntity);
			em.flush();
			return 1;
		
		} catch (Exception e) {
			System.err.println(e.getMessage());
			return -1;
		}
	}
	
	
	//public int updateParcelaPagamento(int id, int idFormaPagamento, String codeTransacao, String titularPagamento, Date dataPagamento, int status){
	public int updateParcelaPagamento(int id, int idFormaPagamento, String codeTransacao, String titularPagamento, Date dataPagamento, int status){

		System.out.println("[CONTRATO - DAO][updateParcelaPagamento] :");
		int updated = -1;

		System.out.println("[CONTRATO - DAO][updateParcelaPagamento] id : "+ id);
		System.out.println("[CONTRATO - DAO][updateParcelaPagamento] codeTransacao: "+ codeTransacao);
		System.out.println("[CONTRATO - DAO][updateParcelaPagamento] titularPagamento : "+ titularPagamento);
		System.out.println("[CONTRATO - DAO][updateParcelaPagamento] dataPagamento : "+ dataPagamento);
		System.out.println("[CONTRATO - DAO][updateParcelaPagamento] status : "+ status);
		
		try{
//			updated = em.createQuery("UPDATE ContratoPagamentoWeb cp SET cp.codeTransacao= :codeTransacao," +
//					"cp.formaPagamentoSy= :idFormaPagamento," +
//					"cp.titularPagamento= :titularPagamento," +
//					"cp.dataPagamento= :dataPagamento," +
//					"cp.status= :status" +
//					" WHERE cp.idContratoPagamentoWeb = :id)")
//					.setParameter("codeTransacao", codeTransacao)
//					.setParameter("idFormaPagamento", idFormaPagamento)
//					.setParameter("titularPagamento", titularPagamento)
//					.setParameter("dataPagamento", dataPagamento)
//					.setParameter("status", status)
//					.setParameter("id",id)
//					.executeUpdate();

		} catch (Exception e) {
				System.err.println(e.getMessage());
		}
		return updated;
	}

}
